library(ggplot2)
library(ggsci)
library(hdf5r)
library(patchwork)
library(RColorBrewer)
library(Seurat)
library(tidyverse)
setwd("/Users/christinacomo/Desktop/Spatial")
getwd()
[1] "/Users/christinacomo/Desktop/Spatial"
data_dir <- '/Users/christinacomo/Desktop/Spatial/data/C'
list.files(data_dir) # Should show filtered_feature_bc_matrix.h5
[1] "cellshighlighted_C.png" "clusters and spatial_C.png" "filtered_feature_bc_matrix.h5"
[4] "nCount_C.png" "nCount_D.png" "spatial"
[7] "spatial_C.png" "web_summary.html"
SampleC <- Load10X_Spatial(
data_dir,
filename = "filtered_feature_bc_matrix.h5",
assay = "Spatial",
slice = "slice1",
filter.matrix = TRUE,
to.upper = FALSE,
image = NULL,
)
sample <- "mutant1"
SampleC[["orig.ident"]] <- sample
SampleC <- SetIdent(SampleC, value = so@meta.data$orig.ident)
SampleC <- PercentageFeatureSet(SampleC, "^mt-", col.name = "percent_mito")
SampleC <- PercentageFeatureSet(SampleC, "^Hb.*-", col.name = "percent_hb")
VlnPlot(SampleC,
features = c("nCount_Spatial",
"nFeature_Spatial",
"percent_mito",
"percent_hb"),
pt.size = 0.1,
ncol = 2) + NoLegend()

SpatialFeaturePlot(SampleC,
features = c("nCount_Spatial",
"nFeature_Spatial",
"percent_mito",
"percent_hb"))

SampleC <- SCTransform(SampleC, assay = "Spatial")
Calculating cell attributes from input UMI matrix: log_umi
Variance stabilizing transformation of count matrix of size 16898 by 2155
Model formula is y ~ log_umi
Get Negative Binomial regression parameters per gene
Using 2000 genes, 2155 cells
|
| | 0%
|
|=========================== | 25%
|
|====================================================== | 50%
|
|================================================================================ | 75%
|
|===========================================================================================================| 100%
Found 116 outliers - those will be ignored in fitting/regularization step
Second step: Get residuals using fitted parameters for 16898 genes
|
| | 0%
|
|=== | 3%
|
|====== | 6%
|
|========= | 9%
|
|============= | 12%
|
|================ | 15%
|
|=================== | 18%
|
|====================== | 21%
|
|========================= | 24%
|
|============================ | 26%
|
|=============================== | 29%
|
|=================================== | 32%
|
|====================================== | 35%
|
|========================================= | 38%
|
|============================================ | 41%
|
|=============================================== | 44%
|
|================================================== | 47%
|
|====================================================== | 50%
|
|========================================================= | 53%
|
|============================================================ | 56%
|
|=============================================================== | 59%
|
|================================================================== | 62%
|
|===================================================================== | 65%
|
|======================================================================== | 68%
|
|============================================================================ | 71%
|
|=============================================================================== | 74%
|
|================================================================================== | 76%
|
|===================================================================================== | 79%
|
|======================================================================================== | 82%
|
|=========================================================================================== | 85%
|
|============================================================================================== | 88%
|
|================================================================================================== | 91%
|
|===================================================================================================== | 94%
|
|======================================================================================================== | 97%
|
|===========================================================================================================| 100%
Computing corrected count matrix for 16898 genes
|
| | 0%
|
|=== | 3%
|
|====== | 6%
|
|========= | 9%
|
|============= | 12%
|
|================ | 15%
|
|=================== | 18%
|
|====================== | 21%
|
|========================= | 24%
|
|============================ | 26%
|
|=============================== | 29%
|
|=================================== | 32%
|
|====================================== | 35%
|
|========================================= | 38%
|
|============================================ | 41%
|
|=============================================== | 44%
|
|================================================== | 47%
|
|====================================================== | 50%
|
|========================================================= | 53%
|
|============================================================ | 56%
|
|=============================================================== | 59%
|
|================================================================== | 62%
|
|===================================================================== | 65%
|
|======================================================================== | 68%
|
|============================================================================ | 71%
|
|=============================================================================== | 74%
|
|================================================================================== | 76%
|
|===================================================================================== | 79%
|
|======================================================================================== | 82%
|
|=========================================================================================== | 85%
|
|============================================================================================== | 88%
|
|================================================================================================== | 91%
|
|===================================================================================================== | 94%
|
|======================================================================================================== | 97%
|
|===========================================================================================================| 100%
Calculating gene attributes
Wall clock passed: Time difference of 23.56156 secs
Determine variable features
Place corrected count matrix in counts slot
Centering data matrix
|
| | 0%
|
|=========================== | 25%
|
|====================================================== | 50%
|
|================================================================================ | 75%
|
|===========================================================================================================| 100%
Set default assay to SCT
SampleC <- RunPCA(SampleC, assay = "SCT", verbose = FALSE)
SampleC <- FindNeighbors(SampleC, reduction = "pca", dims = 1:30, verbose = FALSE)
SampleC <- FindClusters(SampleC, verbose = FALSE)
SampleC <- RunUMAP(SampleC, reduction = "pca", dims = 1:30)
14:12:00 UMAP embedding parameters a = 0.9922 b = 1.112
14:12:00 Read 2155 rows and found 30 numeric columns
14:12:00 Using Annoy for neighbor search, n_neighbors = 30
14:12:00 Building Annoy index with metric = cosine, n_trees = 50
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
14:12:00 Writing NN index file to temp file /var/folders/2b/gcm1xy2n6s50jqf9f3ln87140000gn/T//RtmpWq9Udx/file58a41724157f
14:12:00 Searching Annoy index using 1 thread, search_k = 3000
14:12:00 Annoy recall = 100%
14:12:01 Commencing smooth kNN distance calibration using 1 thread
14:12:01 Initializing from normalized Laplacian + noise
14:12:02 Commencing optimization for 500 epochs, with 78806 positive edges
0% 10 20 30 40 50 60 70 80 90 100%
[----|----|----|----|----|----|----|----|----|----|
**************************************************|
14:12:04 Optimization finished
p1 <- DimPlot(SampleC, reduction = "umap", label = TRUE)
p2 <- SpatialDimPlot(SampleC, label = TRUE, label.size = 3)
Scale for 'fill' is already present. Adding another scale for 'fill', which will replace the existing scale.
p1 + p2

saveRDS(SampleC, "/Users/christinacomo/Desktop/Spatial/RDS_files/SampleC_initial.RDS")
#Now subset with spots
rawdata_dir <- ('/Users/christinacomo/Desktop/Spatial/Raw Data')
MGE <- read.csv("/Users/christinacomo/Desktop/Spatial/Raw Data/Mutant1MGE.csv")
LGE <- read.csv("/Users/christinacomo/Desktop/Spatial/Raw Data/Mutant1LGE.csv")
Midline <- read.csv("/Users/christinacomo/Desktop/Spatial/Raw Data/Mutant1Midline.csv")
Dorsal_Cortex <- read.csv("/Users/christinacomo/Desktop/Spatial/Raw Data/Mutant1DorsalCortex.csv")
Ventral_Cortex <- read.csv("/Users/christinacomo/Desktop/Spatial/Raw Data/Mutant1VentralCortex.csv")
# rename columns in cortex and meninges dataframes for merging
names(MGE) <- c("barcodes", "region")
names(LGE) <- c("barcodes", "region")
names(Midline) <- c("barcodes", "region")
names(Dorsal_Cortex) <- c("barcodes", "region")
names(Ventral_Cortex) <- c("barcodes", "region")
# merge cortex and meninges dataframes together
regions_of_interest <- rbind(MGE, LGE, Midline, Dorsal_Cortex, Ventral_Cortex)
# grab the spot barcodes to use for subsetting
spots.use <- regions_of_interest$barcodes
regions_of_interest <- regions_of_interest %>% column_to_rownames(var = "barcodes")
# check dimensions of regions_of_interest and make sure it is the sum of cc_cortex and cc_meninges
dim(regions_of_interest)
[1] 313 1
# now, subset the seurat object
SampleC <- subset(SampleC, cells = spots.use)
subset_C <- AddMetaData(SampleC, metadata = regions_of_interest)
p1 <- SpatialDimPlot(subset_C)
p1

SpatialFeaturePlot(subset_C,
features = c("nCount_Spatial",
"nFeature_Spatial",
"percent_mito",
"percent_hb"))

saveRDS(subset_C, "/Users/christinacomo/Desktop/Spatial/RDS_files/SampleC_subsetwithbarcodes.RDS")
LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCmVkaXRvcl9vcHRpb25zOiAKICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lCi0tLQoKLS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCmVkaXRvcl9vcHRpb25zOiAKICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lCi0tLQpgYGB7cn0KbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KGdnc2NpKQpsaWJyYXJ5KGhkZjVyKQpsaWJyYXJ5KHBhdGNod29yaykKbGlicmFyeShSQ29sb3JCcmV3ZXIpCmxpYnJhcnkoU2V1cmF0KQpsaWJyYXJ5KHRpZHl2ZXJzZSkKYGBgCgoKYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9CmtuaXRyOjpvcHRzX2NodW5rJHNldCh3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwgZXJyb3IgPSBGQUxTRSkgCmBgYAoKCmBgYHtyfQpzZXR3ZCgiL1VzZXJzL2NocmlzdGluYWNvbW8vRGVza3RvcC9TcGF0aWFsIikKZ2V0d2QoKQpgYGAKCmBgYHtyfQpkYXRhX2RpciA8LSAnL1VzZXJzL2NocmlzdGluYWNvbW8vRGVza3RvcC9TcGF0aWFsL2RhdGEvQycKbGlzdC5maWxlcyhkYXRhX2RpcikgIyBTaG91bGQgc2hvdyBmaWx0ZXJlZF9mZWF0dXJlX2JjX21hdHJpeC5oNQpgYGAKCgpgYGB7cn0KU2FtcGxlQyA8LSBMb2FkMTBYX1NwYXRpYWwoCiAgZGF0YV9kaXIsCiAgZmlsZW5hbWUgPSAiZmlsdGVyZWRfZmVhdHVyZV9iY19tYXRyaXguaDUiLAogIGFzc2F5ID0gIlNwYXRpYWwiLAogIHNsaWNlID0gInNsaWNlMSIsCiAgZmlsdGVyLm1hdHJpeCA9IFRSVUUsCiAgdG8udXBwZXIgPSBGQUxTRSwKICBpbWFnZSA9IE5VTEwsCikKYGBgCgpgYGB7cn0Kc2FtcGxlIDwtICJtdXRhbnQxIgpTYW1wbGVDW1sib3JpZy5pZGVudCJdXSA8LSBzYW1wbGUKU2FtcGxlQyA8LSBTZXRJZGVudChTYW1wbGVDLCB2YWx1ZSA9IHNvQG1ldGEuZGF0YSRvcmlnLmlkZW50KQpgYGAKCgoKYGBge3J9ClNhbXBsZUMgPC0gUGVyY2VudGFnZUZlYXR1cmVTZXQoU2FtcGxlQywgIl5tdC0iLCBjb2wubmFtZSA9ICJwZXJjZW50X21pdG8iKQpTYW1wbGVDIDwtIFBlcmNlbnRhZ2VGZWF0dXJlU2V0KFNhbXBsZUMsICJeSGIuKi0iLCBjb2wubmFtZSA9ICJwZXJjZW50X2hiIikKYGBgCgpgYGB7ciwgZmlnLmhlaWdodCA9IDMsIGZpZy53aWR0aCA9IDN9ClZsblBsb3QoU2FtcGxlQywgCiAgICAgICAgZmVhdHVyZXMgPSBjKCJuQ291bnRfU3BhdGlhbCIsIAogICAgICAgICAgICAgICAgICAgICAibkZlYXR1cmVfU3BhdGlhbCIsIAogICAgICAgICAgICAgICAgICAgICAicGVyY2VudF9taXRvIiwgCiAgICAgICAgICAgICAgICAgICAgICJwZXJjZW50X2hiIiksCiAgICAgICAgcHQuc2l6ZSA9IDAuMSwgCiAgICAgICAgbmNvbCA9IDIpICsgTm9MZWdlbmQoKQpgYGAKCmBgYHtyfQpTcGF0aWFsRmVhdHVyZVBsb3QoU2FtcGxlQywgCiAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyA9IGMoIm5Db3VudF9TcGF0aWFsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5GZWF0dXJlX1NwYXRpYWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVyY2VudF9taXRvIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBlcmNlbnRfaGIiKSkKYGBgCgpgYGB7cn0KU2FtcGxlQyA8LSBTQ1RyYW5zZm9ybShTYW1wbGVDLCBhc3NheSA9ICJTcGF0aWFsIikKCmBgYAoKYGBge3J9ClNhbXBsZUMgPC0gUnVuUENBKFNhbXBsZUMsIGFzc2F5ID0gIlNDVCIsIHZlcmJvc2UgPSBGQUxTRSkKU2FtcGxlQyA8LSBGaW5kTmVpZ2hib3JzKFNhbXBsZUMsIHJlZHVjdGlvbiA9ICJwY2EiLCBkaW1zID0gMTozMCwgdmVyYm9zZSA9IEZBTFNFKQpTYW1wbGVDIDwtIEZpbmRDbHVzdGVycyhTYW1wbGVDLCB2ZXJib3NlID0gRkFMU0UpClNhbXBsZUMgPC0gUnVuVU1BUChTYW1wbGVDLCByZWR1Y3Rpb24gPSAicGNhIiwgZGltcyA9IDE6MzApCmBgYAoKYGBge3J9CnAxIDwtIERpbVBsb3QoU2FtcGxlQywgcmVkdWN0aW9uID0gInVtYXAiLCBsYWJlbCA9IFRSVUUpCnAyIDwtIFNwYXRpYWxEaW1QbG90KFNhbXBsZUMsIGxhYmVsID0gVFJVRSwgbGFiZWwuc2l6ZSA9IDMpCnAxICsgcDIKYGBgCgpgYGB7cn0Kc2F2ZVJEUyhTYW1wbGVDLCAiL1VzZXJzL2NocmlzdGluYWNvbW8vRGVza3RvcC9TcGF0aWFsL1JEU19maWxlcy9TYW1wbGVDX2luaXRpYWwuUkRTIikKYGBgCgoKYGBge3J9CiNOb3cgc3Vic2V0IHdpdGggIHNwb3RzIApyYXdkYXRhX2RpciA8LSAoJy9Vc2Vycy9jaHJpc3RpbmFjb21vL0Rlc2t0b3AvU3BhdGlhbC9SYXcgRGF0YScpCgpNR0UgPC0gcmVhZC5jc3YoIi9Vc2Vycy9jaHJpc3RpbmFjb21vL0Rlc2t0b3AvU3BhdGlhbC9SYXcgRGF0YS9NdXRhbnQxTUdFLmNzdiIpCkxHRSA8LSByZWFkLmNzdigiL1VzZXJzL2NocmlzdGluYWNvbW8vRGVza3RvcC9TcGF0aWFsL1JhdyBEYXRhL011dGFudDFMR0UuY3N2IikKTWlkbGluZSA8LSByZWFkLmNzdigiL1VzZXJzL2NocmlzdGluYWNvbW8vRGVza3RvcC9TcGF0aWFsL1JhdyBEYXRhL011dGFudDFNaWRsaW5lLmNzdiIpCkRvcnNhbF9Db3J0ZXggPC0gcmVhZC5jc3YoIi9Vc2Vycy9jaHJpc3RpbmFjb21vL0Rlc2t0b3AvU3BhdGlhbC9SYXcgRGF0YS9NdXRhbnQxRG9yc2FsQ29ydGV4LmNzdiIpClZlbnRyYWxfQ29ydGV4IDwtIHJlYWQuY3N2KCIvVXNlcnMvY2hyaXN0aW5hY29tby9EZXNrdG9wL1NwYXRpYWwvUmF3IERhdGEvTXV0YW50MVZlbnRyYWxDb3J0ZXguY3N2IikKYGBgCgpgYGB7cn0KIyByZW5hbWUgY29sdW1ucyBpbiBjb3J0ZXggYW5kIG1lbmluZ2VzIGRhdGFmcmFtZXMgZm9yIG1lcmdpbmcKbmFtZXMoTUdFKSA8LSBjKCJiYXJjb2RlcyIsICJyZWdpb24iKQpuYW1lcyhMR0UpIDwtIGMoImJhcmNvZGVzIiwgInJlZ2lvbiIpCm5hbWVzKE1pZGxpbmUpIDwtIGMoImJhcmNvZGVzIiwgInJlZ2lvbiIpCm5hbWVzKERvcnNhbF9Db3J0ZXgpIDwtIGMoImJhcmNvZGVzIiwgInJlZ2lvbiIpCm5hbWVzKFZlbnRyYWxfQ29ydGV4KSA8LSBjKCJiYXJjb2RlcyIsICJyZWdpb24iKQpgYGAKCmBgYHtyfQojIG1lcmdlIGNvcnRleCBhbmQgbWVuaW5nZXMgZGF0YWZyYW1lcyB0b2dldGhlcgpyZWdpb25zX29mX2ludGVyZXN0IDwtIHJiaW5kKE1HRSwgTEdFLCBNaWRsaW5lLCBEb3JzYWxfQ29ydGV4LCBWZW50cmFsX0NvcnRleCkgCmBgYAoKCmBgYHtyfQojIGdyYWIgdGhlIHNwb3QgYmFyY29kZXMgdG8gdXNlIGZvciBzdWJzZXR0aW5nCnNwb3RzLnVzZSA8LSByZWdpb25zX29mX2ludGVyZXN0JGJhcmNvZGVzCnJlZ2lvbnNfb2ZfaW50ZXJlc3QgPC0gcmVnaW9uc19vZl9pbnRlcmVzdCAlPiUgY29sdW1uX3RvX3Jvd25hbWVzKHZhciA9ICJiYXJjb2RlcyIpCmBgYAoKYGBge3J9CiMgY2hlY2sgZGltZW5zaW9ucyBvZiByZWdpb25zX29mX2ludGVyZXN0IGFuZCBtYWtlIHN1cmUgaXQgaXMgdGhlIHN1bSBvZiBjY19jb3J0ZXggYW5kIGNjX21lbmluZ2VzCmRpbShyZWdpb25zX29mX2ludGVyZXN0KQpgYGAKCmBgYHtyfQojIG5vdywgc3Vic2V0IHRoZSBzZXVyYXQgb2JqZWN0ClNhbXBsZUMgPC0gc3Vic2V0KFNhbXBsZUMsIGNlbGxzID0gc3BvdHMudXNlKQpgYGAKCmBgYHtyfQpzdWJzZXRfQyA8LSBBZGRNZXRhRGF0YShTYW1wbGVDLCBtZXRhZGF0YSA9IHJlZ2lvbnNfb2ZfaW50ZXJlc3QpCnAxIDwtIFNwYXRpYWxEaW1QbG90KHN1YnNldF9DKQpwMQpgYGAKCgpgYGB7cn0KU3BhdGlhbEZlYXR1cmVQbG90KHN1YnNldF9DLCAKICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzID0gYygibkNvdW50X1NwYXRpYWwiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibkZlYXR1cmVfU3BhdGlhbCIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwZXJjZW50X21pdG8iLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVyY2VudF9oYiIpKQpgYGAKCmBgYHtyfQpzYXZlUkRTKHN1YnNldF9DLCAiL1VzZXJzL2NocmlzdGluYWNvbW8vRGVza3RvcC9TcGF0aWFsL1JEU19maWxlcy9TYW1wbGVDX3N1YnNldHdpdGhiYXJjb2Rlcy5SRFMiKQpgYGAKCgoK